import java.util.*;

public class InterfaceComUsuario {

	public static void main(String[] args) {
		int escolha;
		SistemaEmprestimo sistema = new SistemaEmprestimo();
		setUp(sistema);
		boolean continuar = true;
		while (continuar) {
			System.out.println("-----------------  MENU ---------------");
			System.out.println(" 1 - Listar usuarios");
			System.out.println(" 2 - Listar documentos da biblioteca");
			System.out.println(" 3 - Excluir usuario");
			System.out.println(" 4 - Excluir item");
			System.out.println(" 5 - Cadastrar usuario");
			System.out.println(" 6 - Cadastrar item");
			System.out.println(" 7 - Emprestar documento");
			System.out.println(" 8 - Devolver documento");
			System.out.println(" 9 - Sair");
			System.out.println("----------------------------------------");
			Scanner entrada = new Scanner(System.in);
			try {
				System.out.print("Digite um inteiro como opcao: ");
				escolha = entrada.nextInt();
			} catch (Exception e) {
				System.out.println("Escolha invalida!");
				continue;
			}
			switch (escolha) {
			case 1:
				listarUsuarios(sistema);
				break;
			case 2:
				listarDocumentos(sistema);
				break;
			case 3:
				excluirUsuario(sistema);
				break;
			case 4:
				excluirDocumento(sistema);
				break;
			case 5:
				cadastrarUsuario(sistema);
				break;
			case 6:
				cadastrarDocumento(sistema);
				break;
			case 7:
				emprestarDocumento(sistema);
				break;
			case 8:
				devolverDocumento(sistema);
				break;
			case 9:
				continuar = false;
				break;
			default:
				System.out.println("Escolha invalida!");
			}
		}
	}

	private static void setUp(SistemaEmprestimo sistema) {
		sistema.addDocumentos(new Livro("Harry Potter e a Pedra Filosofal", "J. K. Rowling", "0"));
		sistema.addDocumentos(new Livro("Harry Potter e a Camara Secreta", "J. K. Rowling", "1"));
		sistema.addDocumentos(new Livro(
				"Harry Potter e o Prizionario de Azkaban", "J. K. Rowling", "2"));
		sistema.addDocumentos(new Livro("Harry Potter e o Calice de Fogo", "J. K. Rowling", "3"));
		sistema.addDocumentos(new Livro("Harry Potter e a Ordem da Fenix", "J. K. Rowling", "4"));
		sistema.addDocumentos(new Livro("Harry Potter e o Pricipe Mestico", "J. K. Rowling", "5"));
		sistema.addDocumentos(new Livro("Harry Potter e as Reliquias Mortais", "J. K. Rowling", "6"));

		sistema.addUsuario(new Aluno("Delano", "0"));
		sistema.addUsuario(new Aluno("Danilo", "1"));
		sistema.addUsuario(new Aluno("Carlucia", "2"));
		sistema.addUsuario(new Aluno("Helo", "3"));
		sistema.addUsuario(new Aluno("Thales", "4"));
		sistema.addUsuario(new Aluno("Iza", "5"));

	}

	private static void emprestarDocumento(SistemaEmprestimo sistema) {
		Scanner entrada = new Scanner(System.in);
		Usuario usuario;
		System.out.print("Digite o nome do usuario: ");
		if ((usuario = sistema.getUsuario(entrada.next())) != null){
			System.out.println("Usuario nao cadastrado!");
		}
		Documento documento;
		if ((documento = sistema.getDocumento(entrada.next())) != null){
			System.out.println("Documento nao cadastrado!");
		}
		try{
			if(sistema.efetuarEmprestimo(usuario, documento)){
			System.out.println("Emprestimo realizado com sucesso!");
		} else{
			System.out.println("Verifique a disponibilidade do documento!");
			}
		} catch(RuntimeException e){
			System.out.println("O documento nao pode ser emprestado a esse usuario!");
		}
	}

	private static void devolverDocumento(SistemaEmprestimo sistema) {
		Scanner entrada = new Scanner(System.in);
		System.out.print("Digite o nome do usuario: ");
		String nome = entrada.next();
		Usuario usuario = sistema.getUsuario(nome);
		System.out.print("Digite o nome do documento: ");
		String nomeDocumento = entrada.next();
		if (sistema.getUsuarios().contains(sistema.getUsuario(nome))) {
			Documento documento = sistema.getDocumento(nomeDocumento);
			sistema.efetuarDevolucao(usuario, documento);
		} else {
			System.out.println("O usuario nao esta cadastrado.");
		}
	}

	private static void cadastrarDocumento(SistemaEmprestimo sistema) {
		int escolhaTipo;
		while (true) {
			Scanner entrada = new Scanner(System.in);
			System.out
					.println("O documento eh :\n(1) Revista \n(2) Livro \n(0) Sair");
			try {
				escolhaTipo = entrada.nextInt();
			} catch (Exception e) {
				System.out.println("Escolha invalida!");
				continue;
			}
			if (escolhaTipo == 1) {
				System.out.print("Digite o titulo da revista: ");
				String titulo = entrada.next();
				System.out.print("Digite o id da revista: ");
				String id = entrada.next();
				Revista documento = new Revista(titulo, id);
				if (sistema.addDocumentos(documento)) {
					System.out.println("Cadastrado com sucesso!");
					System.out.println("Total de Documentos: "
							+ sistema.getDocumentos().size());
				} else {
					System.out.println("Ja possui cadastro!");
				}

			} else if (escolhaTipo == 2) {
				System.out.print("Digite o titulo do livro: ");
				String titulo = entrada.next();
				System.out.print("Digite o autor do livro: ");
				String autor = entrada.next();
				System.out.print("Digite o id do livro: ");
				String id = entrada.next();
				Livro documento = new Livro(titulo, autor, id);
				if (sistema.addDocumentos(documento)) {
					System.out.println("Cadastrado com sucesso!");
					System.out.println("Total de Documentos: "
							+ sistema.getDocumentos().size());
				} else {
					System.out.println("Ja possui cadastro!");
				}

			} else if (escolhaTipo == 0) {
				break;

			} else {
				System.out.println("Escolha Invalida!");
			}

		}

	}

	private static void cadastrarUsuario(SistemaEmprestimo sistema) {
		int escolhaTipo;
		while (true) {
			Scanner entrada = new Scanner(System.in);
			System.out
					.println("O usuario eh :\n(1) Aluno \n(0) Sair");
			try {
				escolhaTipo = entrada.nextInt();
			} catch (Exception e) {
				System.out.println("Escolha invalida!");
				continue;
			}
			if (escolhaTipo == 1) {
				System.out.print("Digite o nome do usuario: ");
				String nome = entrada.next();
				System.out.print("Digite o id do usuario: ");
				String id = entrada.next();
				Aluno usuario = new Aluno(nome, id);
				if (sistema.addUsuario(usuario)) {
					System.out.println("Cadastrado com sucesso!");
					System.out.println("Total de Usuarios: "
							+ sistema.getUsuarios().size());
				} else {
					System.out.println("Ja possui cadastro!");
				}

			} else if (escolhaTipo == 0) {
				break;

			} else {
				System.out.println("Escolha Invalida!");
			}
		}

	}

	private static void excluirDocumento(SistemaEmprestimo sistema) {
		Scanner entrada = new Scanner(System.in);
		System.out.print("Digite o nome do documento: ");
		String nomeDocumento = entrada.next();
		Documento documento = sistema.getDocumento(nomeDocumento);
		if (sistema.excluiDocumento(documento)) {
			System.out.println("Excluido com sucesso!");
		} else {
			System.out.println("Documento emprestado ou nao existe.");
		}
	}

	private static void excluirUsuario(SistemaEmprestimo sistema) {
		Scanner entrada = new Scanner(System.in);
		System.out
				.println("O usuario eh: (1) Aluno  (2) Funcionario  (3) Professor (4) Outro");
		int opcao = entrada.nextInt();
		System.out.print("Digite o nome do usuario: ");
		String nome = entrada.next();
		Usuario usuario = sistema.getUsuario(nome);
		if (sistema.excluiUsuario(usuario)) {
			System.out.println("Excluido com sucesso!");
		} else {
			System.out
					.println("Usuario nao esta cadastrado ou esta com documento emprestado.");
		}

	}

	private static void listarDocumentos(SistemaEmprestimo sistema) {
		List<Documento> documentos = (List<Documento>) sistema.getDocumentos();
		if (documentos.size() != 0) {
			for (int i = 0; i < documentos.size(); i++) {
				System.out.print(documentos.get(i).getTitulo() + ": "
						+ documentos.get(i).getClass().getName() + " : ");
				if (documentos.get(i).isEmprestado()) {
					System.out.println("Emprestado.");
				} else {
					System.out.println("Livre.");
				}
			}
		} else {
			System.out.println("Nao existe documentos cadastrados.");
		}
	}

	private static void listarUsuarios(SistemaEmprestimo sistema) {
		Iterator<Usuario> usuarios = sistema.getUsuarios().iterator();
		if (usuarios.hasNext()) {
			for (Usuario usuario = usuarios.next(); usuarios.hasNext(); usuario = usuarios.next()) {
				System.out.println(usuario.getNome() + ": "
						+ usuario.getClass().getName());
			}
		} else {
			System.out.println("Nao existe usuarios cadastrados.");
		}
	}

}
